#%%
import pandas as pd

#%%[markdown]
### 请补全代码（10分）导入数据
#%%
df = pd.read_csv("Wholesale customers data.csv")
df
# %%[markdown]
""" 
### 请补全代码（5分）
查看数据缺失值---数据并没有缺失值，数据完整性比较好
查询结果中不存在缺失值
"""
df.info()
# %%[markdown]
""" 
### 请补全代码（5分）
数据标准化
"""
#%%
df.describe()
#%%[markdown]
""" 
#在此使用Normalizer---使用方法同MinMaxScaler、StandardScaler
#请补全代码（10分）
"""
from sklearn.preprocessing import MinMaxScaler, Normalizer, StandardScaler

# %%
df_ = pd.DataFrame(
    Normalizer(norm="l2").fit_transform(df.iloc[:, 2:]), columns=df.columns[2:]
)
df_.describe()
df_
#%%[markdown]
""" 
适用轮廓系数找到最优K
#请补全代码（25分）
"""
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score  # 轮廓系数
import matplotlib.pyplot as plt

# %%
score = []
for i in range(2, 7):
    KM = KMeans(n_clusters=i, random_state=0).fit(df_)
    score.append(silhouette_score(df_, KM.labels_))

plt.plot(range(2, 7), score)
score.index(max(score)), max(score), "score"
# %%
KM = KMeans(n_clusters=3, random_state=0).fit(df_)
df_['labels'] = KM.labels_
df_.groupby(by='labels').mean()


# %%
t = df_['labels'].value_counts()
plt.pie(t,autopct='%.2f%%')
plt.legend(t.index)
# %%
df_.groupby(by='labels').mean().plot.bar(figsize=(12,5))
# %%
